Skip to content

用并行 Claude 团队构建 C 编译器

官方原文: https://www.anthropic.com/engineering/building-c-compiler

发布日期: 2026年2月5日

作者: Anthropic Safeguards 团队研究员 Nicholas Carlini


概览

本文介绍一项“Agent 团队”实验:多个 Claude 实例在没有持续人工干预的情况下,在同一代码库上并行工作。作者让 16 个 Agent 从零用 Rust 编写一款可编译 Linux kernel 的 C compiler。近 2,000 个 Claude Code session、约 20,000 美元 API 成本后,Agent 团队产出约 100,000 行代码的 compiler,可在 x86、ARM 与 RISC-V 上构建 Linux 6.9。

该 compiler 已开源于 github.com/anthropics/claudes-c-compiler

让 Claude 长时间运行

现有 Agent scaffold,例如 Claude Code,通常要求操作人员在线。为获得持续、自主的进展,作者制作了一个 harness,把 Claude 放入简单循环:一项任务结束,就立刻接下下一项。Bash script 在 while true 中调用 claude --dangerously-skip-permissions,并按 commit 记录输出。prompt 要求 Claude 拆分问题、追踪进度并持续推进。作者打趣道:“循环会永远运行,不过有一次我看到 Claude 不小心执行 pkill -9 bash,把自己杀掉了。”

并行运行 Claude

多个并行实例同时解决两个限制:单个 session 一次只能做一件事,而多个 Agent 可以专门化。

实现方式是创建 bare Git repository,并为每个 Agent 提供一个挂载仓库的 Docker container。每个 Agent clone 本地副本、工作后将变更 push 到 upstream。一个简单同步算法避免冲突:

  1. Claude 向 current_tasks/ 写入文本文件,以“锁定”任务。若两名 Agent 同时领取同一任务,Git 同步迫使后一名选择其他任务。
  2. Claude 完成工作、从 upstream pull、merge 变更、push,然后移除锁。merge conflict 很常见,但 Claude 能处理。
  3. 无限循环会在新的 container 中启动新的 session。

没有 orchestrator Agent;每个 Claude Agent 独立决定怎么做,通常选择“下一个最显而易见”的问题。

使用 Claude Agent 团队编程的经验

编写极高质量的测试

Claude 自主工作,因此“任务 verifier 必须近乎完美,否则 Claude 会解决错误的问题”。作者构建 CI pipeline,并在发现失效模式后持续收紧约束。

站在 Claude 的角度设计

test harness 是为 Claude 而不是人设计的。说明要求维护完整 README,并高频更新 progress file。设计围绕 LLM 的固有限制展开:

  • Context window pollution。 Harness 不应打印数千无用字节。重要信息应写入 log file,且日志要便于处理,例如“若有错误,Claude 应写入 ERROR,并在同一行给出原因,以便 grep 找到”;汇总统计应预先计算。
  • Time blindness。 Claude 不能感知时间,“会乐于花数小时跑测试而不推动进展”。Harness 因而提供 --fast,运行 1% 或 10% 随机 sample;每个 Agent 内结果确定,但不同 VM 的 sample 随机。

让并行化足够简单

当有许多彼此独立的失败 test 时,并行化很直接:每个 Agent 领一个不同 test。通过率达到 99% 后,各 Agent 分别尝试编译不同的小型开源项目,例如 SQLite、Redis、libjpeg、QuickJS 和 Lua。

编译 Linux kernel 更难,因为它是单一巨型任务:所有 Agent 都可能遇到同一 bug 并覆盖彼此变更。解决办法是把 GCC 当作 oracle。新的 harness 随机让 GCC 编译大部分 kernel,仅让 Claude compiler 编译其余文件,使不同 Agent 能修复不同文件的 bug。两个文件合在一起失败、单独却成功时,仍需 delta debugging。

多种 Agent 角色

并行也带来专业化:一个 Agent 合并重复代码,一个提升 compiler performance,另一个专注生成高效 compiled code,一个以 Rust developer 视角批评设计,另一个负责 documentation。

压力测试 Agent 团队的边界

该项目也可视作能力 benchmark。此前 Opus 4 系列几乎不能写出可用 compiler;“Opus 4.5 是第一个跨过门槛、能产出可通过大型 test suite 的功能 compiler 的模型”。随后以 Opus 4.6 继续向前测试。

评估

两周内近 2,000 个 session 中,Opus 4.6 消耗 20 亿 input token、生成 1.4 亿 output token,成本略低于 20,000 美元。这是 clean-room implementation,不联网,只依赖 Rust standard library。

100,000 行 compiler 可在 x86、ARM、RISC-V 上构建可启动 Linux 6.9;还可编译 QEMU、FFmpeg、SQLite、Postgres、Redis,在多数 compiler test suite(包括 GCC torture test suite)上达 99% pass rate,并能编译、运行 Doom。

限制包括:

  • 缺少 Linux 脱离 real mode 所需的 16-bit x86 compiler,因此该部分调用 GCC;
  • 没有自有 assembler 和 linker,二者仍存在问题,演示使用 GCC 的 assembler 与 linker;
  • 能构建很多项目但不是全部,尚不是现实 compiler 的 drop-in replacement;
  • 生成代码效率低于关闭全部 optimization 的 GCC;
  • Rust 代码质量尚可,但远未到 expert 水平。

Compiler 几乎触及 Opus 的能力边界:“新 feature 和 bugfix 经常破坏已有功能。”特别困难的是 16-bit x86 code generator。Opus 虽能通过 opcode prefix 输出正确 16-bit x86,但输出超过 Linux 强制的 32k code limit,因此 Claude 让 GCC 处理 x86;ARM 与 RISC-V 则完全自行编译。

展望

作者认为 Agent 团队展示了“自主实现完整复杂项目的可能性”,让用户可以设定更有雄心的目标。但全自主开发也有真实风险:test 全部通过时,人们很容易以为工作完成,“但这很少是真的”。他既兴奋也不安,认为“程序员部署从未亲自验证的软件”确实值得担忧。

快速进展打开了编写大量新代码的大门,积极用途预计会超过负面影响,但仍需要新的策略来安全驾驭。

致谢

感谢 Josef Bacik、Edwin Chen、Bernardo Meurer Costa、Jake Eaton、Dan Kelley、Felix Klock、Jannet Park、Steve Weis 以及 Anthropic 的其他同事。

AI 落地咨询
艾维禾砺数字科技

企业 AI 落地全链路服务

Agent 开发工作流搭建Claude Code 集成
微信咨询
d187l8801b6124
访问官网 ivheli.com